package kernel.loaders;

import java.io.File;
import java.io.FileInputStream;

/**O SourceSTLFile faz a leitura byte a byte de um arquivo de texto qualquer.
 * Aspectos de baixo nível da leitura como identificação de final de linha e 
 * final de arquivo são tratados aqui.
 * @author George
 */
public class SourceSTLFile {

  public static final char EOL = '\r';
  public static final char EOT = '\u0000';

  private File sourceFile;
  private FileInputStream source;
  private int currentLine;

  /**Construtor da classe.
   * @param filename nome do arquivo a ser lido.
   */
  public SourceSTLFile(String filename) {    
    try {   
      sourceFile = new java.io.File(filename);
      source = new java.io.FileInputStream(sourceFile);
      currentLine = 1;      
    }
    catch (java.io.IOException s) {
      sourceFile = null;
      source = null;
      currentLine = 0;
    }
  }
  
  /**Lê o próximo caracter.
   * @ return o caracter Lido
   */
  public char getSource() {
    try {
      int c = source.read();
      if (c == -1) {
        c = EOT;
      } else if (c == EOL) {
          currentLine++;             
      }
      if (c == 10) {
          c = 13;
      }
      return (char) c;
    }
    catch (java.io.IOException s) {   
      return EOT;     
    }
  }
  
  /**Retorna a linha atual do arquivo.
   * @return - linha atual do arquivo.
   */
  public int getCurrentLine() {
    return currentLine;
  }
}